502 proxy error解决方法 | 您所在的位置:网站首页 › origin 报错4:502 › 502 proxy error解决方法 |
nginx的反向代理机制解决前端跨域问题
1.什么是跨域以及产生原因
跨域是指a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,或是a页面为ip地址,b页面为域名地址,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。 ![]() 目前来讲没有不依靠服务器端来跨域请求资源的技术 1.jsonp 需要目标服务器配合一个callback函数。 2.window.name+iframe 需要目标服务器响应window.name。 3.window.location.hash+iframe 同样需要目标服务器作处理。 4.html5的 postMessage+ifrme 这个也是需要目标服务器或者说是目标页面写一个postMessage,主要侧重于前端通讯。 5.CORS 需要服务器设置header :Access-Control-Allow-Origin。 6.nginx反向代理 这个方法一般很少有人提及,但是他可以不用目标服务器配合,不过需要你搭建一个中转nginx服务器,用于转发请求。 当然,Apache 也可以做反向代理,原理差不多,见上一篇文章,此处不多说。 nginx反向代理具体配置redis.conf文件如下: ## Basic reverse proxy server ## ## Apache backend for www.redis.com.cn ## upstream apachephp { server ip:8080; #Apache } ## Start www.redis.com.cn ## server { listen 80; server_name www.redis.com.cn; access_log logs/redis.access.log main; error_log logs/redis.error.log; root html; index index.html index.htm index.php; ## send request back to apache ## location / { proxy_pass http://apachephp; #Proxy Settings proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_max_temp_file_size 0; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } } ## End www.redis.com.cn ## 以下做一个解释:1.'^~ /proxy/html/ ' 就像上面说的一样是一个匹配规则,用于拦截请求,匹配任何以 /proxy/html/开头的地址,匹配符合以后,停止往下搜索正则。 2.rewrite ^/proxy/html/(.*)$ /$1 break; 代表重写拦截进来的请求,并且只能对域名后边的除去传递的参数外的字符串起作用,例如www.c.com/proxy/html/api/msg?method=1¶=2重写。只对/proxy/html/api/msg重写。 rewrite后面的参数是一个简单的正则 ^/proxy/html/(.*)$ ,$1代表正则中的第一个(),$2代表第二个()的值,以此类推。 break代表匹配一个之后停止匹配。 3.proxy_pass 既是把请求代理到其他主机,其中 http://www.b.com/ 写法和 http://www.b.com写法的区别如下: 不带/ location /html/ { proxy_pass http://b.com:8300; } 带/ location /html/ { proxy_pass http://b.com:8300/; } 上面两种配置,区别只在于proxy_pass转发的路径后是否带 “/”。 针对情况1,如果访问url = http://server/html/test.jsp,则被nginx代理后,请求路径会便问http://proxy_pass/html/test.jsp,将test/ 作为根路径,请求test/路径下的资源。 针对情况2,如果访问url = http://server/html/test.jsp,则被nginx代理后,请求路径会变为 http://proxy_pass/test.jsp,直接访问server的根资源。 修改配置后重启nginx代理就成功了。 |
CopyRight 2018-2019 实验室设备网 版权所有 |